<!DOCTYPE html>
<html lang="en">
    <head>
	<meta name="generator" content="Hugo 0.75.1" />
  <meta charset="utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <meta name="format-detection" content="telephone=no" />

  <title>
    迪克猪的博客
  </title>

  
  <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
  <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
  <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" />
  <link rel="manifest" href="/manifest.json" />
  <meta name="theme-color" content="#ffffff" />

  
  <link
    rel="stylesheet"
    href="https://unpkg.com/modern-normalize@0.6.0/modern-normalize.css"
  />

  
  
  
  
  <link rel="stylesheet" href="https://zsy619.github.io/style.min.f7761d111b74dd5c07f0111decee92938c12abc42e0fd319e1a07483e248b54e.css" integrity="sha256-93YdERt03VwH8BEd7O6Sk4wSq8QuD9MZ4aB0g&#43;JItU4=" />

  
    <link rel="alternate" type="application/rss+xml" href="https://zsy619.github.io/index.xml" title="迪克猪的博客" />
  
  
    
  
</head>

    <body>
        <header id="header">
  <div class="header_container">
    <h1 class="sitetitle">
      <a href="https://zsy619.github.io" title="迪克猪的博客">迪克猪的博客</a>
    </h1>
    <nav class="navbar">
      <ul>
        <li><a href="https://zsy619.github.io">Home</a></li>
        
          <li>
            <a href="/post/">
              
              <span>LINUX性能优化</span>
            </a>
          </li>
        
          <li>
            <a href="/csapp/">
              
              <span>深入理解计算机系统_第三版</span>
            </a>
          </li>
        
          <li>
            <a href="/golang/">
              
              <span>golang</span>
            </a>
          </li>
        
          <li>
            <a href="/docker/">
              
              <span>容器</span>
            </a>
          </li>
        
          <li>
            <a href="/flutter/">
              
              <span>Flutter</span>
            </a>
          </li>
        
          <li>
            <a href="/know/">
              
              <span>知识点</span>
            </a>
          </li>
        
          <li>
            <a href="/categories/">
              
              <span>目录</span>
            </a>
          </li>
        
          <li>
            <a href="/about/">
              
              <span>关于</span>
            </a>
          </li>
        
        <li class="hide-sm"><a href="https://zsy619.github.io/index.xml" type="application/rss+xml">RSS</a></li>
      </ul>
    </nav>
  </div>
</header>

        
<section id="main" class="index">
  <div class="post_list container">
    
    
    <article class="post content">
      <time datetime="2020-06-09T11:36:54&#43;0800" class="date">Tue, Jun 9, 2020</time>
      <h3 class="title">
        <a href="https://zsy619.github.io/post/22%E7%AD%94%E7%96%91%E4%B8%89%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E4%B8%8E%E7%A3%81%E7%9B%98%E7%9A%84%E5%8C%BA%E5%88%AB%E6%98%AF%E4%BB%80%E4%B9%88/" title="22|答疑（三）文件系统与磁盘的区别是什么？">22|答疑（三）文件系统与磁盘的区别是什么？</a>
      </h3>
      <div class="post_content summary">
        问题 1：内存回收与 OOM  怎么理解 LRU 内存回收？ 回收后的内存又到哪里去了？ OOM 是按照虚拟内存还是实际内存来打分？ 怎么估计应用程序的最小内存？  一旦发现内存紧张，系统会通过三种方式回收内存。
        
          <span class="hellip">&hellip;</span>
        
      </div>
    </article>
    
    <article class="post content">
      <time datetime="2020-06-09T11:36:16&#43;0800" class="date">Tue, Jun 9, 2020</time>
      <h3 class="title">
        <a href="https://zsy619.github.io/post/21%E5%A5%97%E8%B7%AF%E7%AF%87%E5%A6%82%E4%BD%95%E5%BF%AB%E5%87%86%E7%8B%A0%E6%89%BE%E5%88%B0%E7%B3%BB%E7%BB%9F%E5%86%85%E5%AD%98%E7%9A%84%E9%97%AE%E9%A2%98/" title="21|套路篇--如何“快准狠”找到系统内存的问题？">21|套路篇--如何“快准狠”找到系统内存的问题？</a>
      </h3>
      <div class="post_content summary">
        内存性能指标 系统内存使用情况：已用内存、剩余内存、共享内存、可用内存、缓存和缓冲区的用量
 已用内存和剩余内存很容易理解，就是已经使用和还未使用的内存。 共享内存是通过 tmpfs 实现的，所以它的大小也就是 tmpfs 使用的内存大小。tmpfs 其实也是一种特殊的缓存。 可用内存是新进程可以使用的最大内存，它包括剩余内存和可回收缓存。 缓存包括两部分，一部分是磁盘读取文件的页缓存，用来缓存从磁盘读取的数据，可以加快以后再次访问的速度。 另一部分，则是 Slab 分配器中的可回收内存。缓冲区是对原始磁盘块的临时存储，用来缓存将要写入磁盘的数据。这样，内核就可以把分散的写集中起来，统一优化磁盘写入。  进程内存使用情况：进程的虚拟内存、常驻内存、共享内存以及 Swap 内存
        
          <span class="hellip">&hellip;</span>
        
      </div>
    </article>
    
    <article class="post content">
      <time datetime="2020-06-09T10:57:42&#43;0800" class="date">Tue, Jun 9, 2020</time>
      <h3 class="title">
        <a href="https://zsy619.github.io/post/20%E6%A1%88%E4%BE%8B%E7%AF%87%E4%B8%BA%E4%BB%80%E4%B9%88%E7%B3%BB%E7%BB%9F%E7%9A%84swap%E5%8F%98%E9%AB%98%E4%BA%86%E4%B8%8B/" title="20|案例篇--为什么系统的Swap变高了（下）">20|案例篇--为什么系统的Swap变高了（下）</a>
      </h3>
      <div class="post_content summary">
        在内存资源紧张时，Linux 会通过 Swap ，把不常访问的匿名页换出到磁盘中，下次访问的时候再从磁盘换入到内存中来。你可以设置 /proc/sys/vm/min_free_kbytes，来调整系统定期回收内存的阈值；也可以设置 /proc/sys/vm/swappiness，来调整文件页和匿名页的回收倾向。
当 Swap 变高时，你可以用 sar、/proc/zoneinfo、/proc/pid/status 等方法，查看系统和进程的内存使用情况，进而找出 Swap 升高的根源和受影响的进程。
        
          <span class="hellip">&hellip;</span>
        
      </div>
    </article>
    
    <article class="post content">
      <time datetime="2020-06-09T10:56:15&#43;0800" class="date">Tue, Jun 9, 2020</time>
      <h3 class="title">
        <a href="https://zsy619.github.io/post/19%E6%A1%88%E4%BE%8B%E7%AF%87%E4%B8%BA%E4%BB%80%E4%B9%88%E7%B3%BB%E7%BB%9F%E7%9A%84swap%E5%8F%98%E9%AB%98%E4%BA%86%E4%B8%8A/" title="19|案例篇--为什么系统的Swap变高了（上）">19|案例篇--为什么系统的Swap变高了（上）</a>
      </h3>
      <div class="post_content summary">
        文件页（File-backed Page） 大部分文件页，都可以直接回收，以后有需要时，再从磁盘重新读取就可以了。而那些被应用程序修改过，并且暂时还没写入磁盘的数据（也就是脏页），就得先写入磁盘，然后才能进行内存释放。
 可以在应用程序中，通过系统调用 fsync ，把脏页同步到磁盘中； 也可以交给系统，由内核线程 pdflush 负责这些脏页的刷新。  Swap 原理 它包括换出和换入两个过程。
        
          <span class="hellip">&hellip;</span>
        
      </div>
    </article>
    
    <article class="post content">
      <time datetime="2020-06-09T10:07:13&#43;0800" class="date">Tue, Jun 9, 2020</time>
      <h3 class="title">
        <a href="https://zsy619.github.io/post/18%E6%A1%88%E4%BE%8B%E7%AF%87%E5%86%85%E5%AD%98%E6%B3%84%E6%BC%8F%E4%BA%86%E6%88%91%E8%AF%A5%E5%A6%82%E4%BD%95%E5%AE%9A%E4%BD%8D%E5%92%8C%E5%A4%84%E7%90%86/" title="18|案例篇--内存泄漏了，我该如何定位和处理？">18|案例篇--内存泄漏了，我该如何定位和处理？</a>
      </h3>
      <div class="post_content summary">
        内存的分配和回收 事先并不知道数据大小，所以你就要用到标准库函数 malloc() ， 在程序中动态分配内存。这时候，系统就会从内存空间的堆中分配内存。
堆内存由应用程序自己来分配和管理。除非程序退出，这些堆内存并不会被系统自动释放，而是需要应用程序明确调用库函数 free() 来释放它们。如果应用程序没有正确释放堆内存，就会造成内存泄漏。
 只读段，包括程序的代码和常量，由于是只读的，不会再去分配新的内存，所以也不会产生内存泄漏。 数据段，包括全局变量和静态变量，这些变量在定义时就已经确定了大小，所以也不会产生内存泄漏。 最后一个内存映射段，包括动态链接库和共享内存，其中共享内存由程序动态分配和管理。所以，如果程序在分配后忘了回收，就会导致跟堆内存类似的泄漏问题。  内存泄漏的危害非常大，这些忘记释放的内存，不仅应用程序自己不能访问，系统也不能把它们再次分配给其他应用。内存泄漏不断累积，甚至会耗尽系统内存。
        
          <span class="hellip">&hellip;</span>
        
      </div>
    </article>
    
    <article class="post content">
      <time datetime="2020-06-09T10:04:02&#43;0800" class="date">Tue, Jun 9, 2020</time>
      <h3 class="title">
        <a href="https://zsy619.github.io/post/17%E6%A1%88%E4%BE%8B%E7%AF%87%E5%A6%82%E4%BD%95%E5%88%A9%E7%94%A8%E7%B3%BB%E7%BB%9F%E7%BC%93%E5%AD%98%E4%BC%98%E5%8C%96%E7%A8%8B%E5%BA%8F%E7%9A%84%E8%BF%90%E8%A1%8C%E6%95%88%E7%8E%87/" title="17|案例篇--如何利用系统缓存优化程序的运行效率？">17|案例篇--如何利用系统缓存优化程序的运行效率？</a>
      </h3>
      <div class="post_content summary">
        缓存命中率  缓存命中率，是指直接通过缓存获取数据的请求次数，占所有数据请求次数的百分比。 命中率越高，表示使用缓存带来的收益越高，应用程序的性能也就越好。   缓存是现在所有高并发系统必需的核心模块，主要作用就是把经常访问的数据（也就是热点数据），提前读入到内存中。 这样，下次访问时就可以直接从内存读取数据，而不需要经过硬盘，从而加快应用程序的响应速度。  这两个工具都是 bcc 软件包的一部分，它们基于 Linux 内核的 eBPF（extended Berkeley Packet Filters）机制，来跟踪内核中管理的缓存，并输出缓存的使用和命中情况。
        
          <span class="hellip">&hellip;</span>
        
      </div>
    </article>
    
    <article class="post content">
      <time datetime="2020-06-06T16:38:42&#43;0800" class="date">Sat, Jun 6, 2020</time>
      <h3 class="title">
        <a href="https://zsy619.github.io/post/16%E5%9F%BA%E7%A1%80%E7%AF%87%E6%80%8E%E4%B9%88%E7%90%86%E8%A7%A3%E5%86%85%E5%AD%98%E4%B8%AD%E7%9A%84buffer%E5%92%8Ccache/" title="16|基础篇怎么理解内存中的Buffer和Cache？">16|基础篇怎么理解内存中的Buffer和Cache？</a>
      </h3>
      <div class="post_content summary">
        free数据来源  Buffers 是内核缓冲区用到的内存，对应 /proc/meminfo 中的Buffers值 Cache 是内核页缓存和Slab用到的内存，对应 /proc/meminfo 中Cached与SReclaimable之和  $ watch cat /proc/meminfo 【注】网上的结论可能是对的，但是很可能跟你的环境并不匹配。最简单来说，同一个指标的具体含义，就可能因为内核版本、性能工具版本的不同而有挺大差别。这也是为什么，我总在专栏中强调通用思路和方法，而不是让你死记结论。对于案例实践来说，机器环境就是我们的最大限制。
        
          <span class="hellip">&hellip;</span>
        
      </div>
    </article>
    
    <article class="post content">
      <time datetime="2020-06-06T10:04:02&#43;0800" class="date">Sat, Jun 6, 2020</time>
      <h3 class="title">
        <a href="https://zsy619.github.io/post/15%E5%9F%BA%E7%A1%80%E7%AF%87linux%E5%86%85%E5%AD%98%E6%98%AF%E6%80%8E%E4%B9%88%E5%B7%A5%E4%BD%9C%E7%9A%84/" title="15|基础篇--Linux内存是怎么工作的？">15|基础篇--Linux内存是怎么工作的？</a>
      </h3>
      <div class="post_content summary">
        内存定义 内存主要用来存储系统和应用程序的指令、数据、缓存等。
内存映射  虚拟地址空间：是连续的，不同字长的处理器，地址空间范围不同  内核空间 用户空间     内存映射：就是将虚拟内存地址映射到物理内存地址    缺页异常：当进程访问的虚拟地址在页表中查不到时，系统会产生一个缺页异
        
          <span class="hellip">&hellip;</span>
        
      </div>
    </article>
    
    <article class="post content">
      <time datetime="2020-06-06T10:02:39&#43;0800" class="date">Sat, Jun 6, 2020</time>
      <h3 class="title">
        <a href="https://zsy619.github.io/post/%E7%AC%AC%E4%BA%8C%E5%91%A810-14%E9%98%B6%E6%AE%B5%E5%B0%8F%E7%BB%93/" title="第二周10-14阶段小结">第二周10-14阶段小结</a>
      </h3>
      <div class="post_content summary">
        学习核心  理解中断：特别是网络接收的软中断  上半部分 下半部分   平均负载 累积中断次数 cpu指标性能  cpu使用率  用户cpu使用率 系统cpu使用率 等待io的cpu使用率 软中断和硬中断的cpu使用率 窃取cpu使用率 客户cpu使用率   平均负载 进程上下文切换 cpu缓存命中率     工具  sar：添加 -n DEV 参数显示网络收发的报告 watch -d cat /proc/softirqs tcpdump：通过 -i eth0 选项指定网卡 eth0，并通过 tcp port 80 选项指定 TCP 协议的 80 端口 uptime、mpstat、pidstat vmstat：查看系统的上下文切换次数和中断次数 top、perf top、perf record、perf report 短时进程execsnoop dstat  把性能指标与工具联合起来 
        
      </div>
    </article>
    
    <article class="post content">
      <time datetime="2020-06-02T12:25:48&#43;0800" class="date">Tue, Jun 2, 2020</time>
      <h3 class="title">
        <a href="https://zsy619.github.io/post/14%E7%AD%94%E7%96%91%E4%BA%8C%E5%A6%82%E4%BD%95%E7%94%A8perf%E5%B7%A5%E5%85%B7%E5%88%86%E6%9E%90java%E7%A8%8B%E5%BA%8F/" title="14|答疑（二）如何用perf工具分析Java程序？">14|答疑（二）如何用perf工具分析Java程序？</a>
      </h3>
      <div class="post_content summary">
        问题 1： 使用 perf 工具时，看到的是 16 进制地址而不是函数名 只要你观察一下 perf 界面最下面的那一行，就会发现一个警告信息：
        
          <span class="hellip">&hellip;</span>
        
      </div>
    </article>
    
    


<div class="pagination">
  <ul class="pagination_container">
      
        
          <li class="page-item prev to-left">
            <a href="/page/6/" aria-label="Previous" class="page-link">
              <span aria-hidden="true">❮ Prev</span>
            </a>
          </li>
        
        
          <li class="page-item next to-right">
            <a href="/page/8/" aria-label="Next" class="page-link">
              <span aria-hidden="true">Next ❯</span>
            </a>
          </li>
        
      
  </ul>
</div>


  </div>
</section>

        <a id="back_to_top" title="Go To Top" href="#">
  <span>
    <svg viewBox="0 0 24 24">
      <path fill="none" d="M0 0h24v24H0z"></path>
      <path d="M12 2L4.5 20.29l.71.71L12 18l6.79 3 .71-.71z"></path>
    </svg>
  </span>
</a>

        <footer id="footer">
  <p>
    <span>&copy; 2021 <a href="https://zsy619.github.io" title="迪克猪的博客">迪克猪的博客</a> </span>
    <span>Built with <a rel="nofollow" target="_blank" href="https://gohugo.io">Hugo</a></span>
    <span>Theme by <a rel="nofollow" target="_blank" href="https://github.com/wayjam/hugo-theme-mixedpaper">WayJam</a></span>
  </p>

  <script src="https://zsy619.github.io/js/main.min.8b182175f5874aeed0acc0979345c98d4bde22208ec4f36cc1d6e3102acb4b10.js" integrity="sha256-ixghdfWHSu7QrMCXk0XJjUveIiCOxPNswdbjECrLSxA=" crossorigin="anonymous" async></script>
</footer>

    </body>
</html>
